/**
 * 收藏文件相关API接口
 */

import request from '@/utils/request'

// 收藏文件接口
export const favoriteApi = {
  /**
   * 收藏文件
   * @param data 收藏数据
   */
  addFavorite(data: {
    fileId: number
    category?: string
    notes?: string
  }) {
    return request.post('/favorites', data)
  },

  /**
   * 取消收藏
   * @param fileId 文件ID
   */
  removeFavorite(fileId: number) {
    return request.delete(`/favorites/${fileId}`)
  },

  /**
   * 更新收藏信息
   * @param favoriteId 收藏ID
   * @param data 更新数据
   */
  updateFavorite(favoriteId: number, data: {
    category?: string
    notes?: string
  }) {
    return request.put(`/favorites/${favoriteId}`, data)
  },

  /**
   * 获取收藏列表
   * @param params 查询参数
   */
  getFavorites(params: {
    category?: string
    search?: string
    page?: number
    size?: number
  } = {}) {
    return request.get('/favorites', { params })
  },

  /**
   * 检查文件是否已收藏
   * @param fileId 文件ID
   */
  checkFavorite(fileId: number) {
    return request.get(`/favorites/check/${fileId}`)
  },

  /**
   * 获取分类统计
   */
  getCategoryStats() {
    return request.get('/favorites/categories')
  },

  /**
   * 获取最近收藏
   * @param limit 限制数量
   */
  getRecentFavorites(limit: number = 10) {
    return request.get('/favorites/recent', {
      params: { limit }
    })
  },

  /**
   * 批量收藏文件
   * @param data 批量收藏数据
   */
  batchAddFavorites(data: {
    fileIds: number[]
    category?: string
  }) {
    return request.post('/favorites/batch', data)
  },

  /**
   * 批量取消收藏
   * @param data 批量取消收藏数据
   */
  batchRemoveFavorites(data: {
    fileIds: number[]
  }) {
    return request.delete('/favorites/batch', { data })
  },

  /**
   * 获取收藏详情
   * @param favoriteId 收藏ID
   */
  getFavoriteDetail(favoriteId: number) {
    return request.get(`/favorites/${favoriteId}`)
  },

  /**
   * 获取文件类型统计
   */
  getFileTypeStats() {
    return request.get('/favorites/file-types')
  }
}

// 收藏相关类型定义
export interface FavoriteFile {
  id: number
  userId: number
  fileId: number
  category: string
  notes?: string
  createdAt: string
  updatedAt: string
  fileInfo?: {
    id: number
    originalName: string
    fileSize: number
    mimeType: string
    createdAt: string
    updatedAt: string
  }
  tags?: Tag[]
}

export interface Tag {
  id: number
  name: string
  color: string
  type: 'file' | 'note'
  usageCount: number
}

export interface CategoryStats {
  category: string
  count: number
}

export interface FileTypeStats {
  fileType: string
  typeName: string
  count: number
  totalSize: number
}
